//package com.rainsoftware.LicenseSystem.utils;
//
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONArray;
//import com.alibaba.fastjson.JSONObject;
//import jakarta.servlet.ReadListener;
//import jakarta.servlet.ServletInputStream;
//import jakarta.servlet.http.HttpServletRequest;
//import jakarta.servlet.http.HttpServletRequestWrapper;
//import org.apache.commons.io.IOUtils;
//
//import java.io.*;
//import java.nio.charset.StandardCharsets;
//import java.util.*;
//
//public class JsonServletRequestWrapper extends HttpServletRequestWrapper {
//    private final Map<String, String[]> parameterMap;
//    private final byte[] bytes;
//
//    public JsonServletRequestWrapper(HttpServletRequest request) throws IOException {
//        super(request);
//        Map<String, String[]> tempParameterMap = request.getParameterMap();
//
//        // 读取请求体数据
//        String bodyStr = IOUtils.toString(request.getInputStream(), StandardCharsets.UTF_8);
//        this.bytes = bodyStr.getBytes(StandardCharsets.UTF_8);
//
//        if ((tempParameterMap == null || tempParameterMap.isEmpty()) && !bodyStr.isEmpty()) {
//            // 解析 JSON
//            JSONObject jsonBody = JSON.parseObject(bodyStr);
//            tempParameterMap = new HashMap<>();
//
//            for (Map.Entry<String, Object> entry : jsonBody.entrySet()) {
//                String key = entry.getKey();
//                Object value = entry.getValue();
//                String[] values;
//
//                if (value instanceof JSONArray jsonArray) {
//                    values = jsonArray.toArray(new String[0]);
//                } else {
//                    values = new String[]{value.toString()};
//                }
//                tempParameterMap.put(key, values);
//            }
//        }
//
//        // 保护参数 Map
//        this.parameterMap = Collections.unmodifiableMap(tempParameterMap);
//    }
//
//    @Override
//    public String getParameter(String name) {
//        String[] values = parameterMap.get(name);
//        return (values == null || values.length == 0) ? null : values[0];
//    }
//
//    @Override
//    public Map<String, String[]> getParameterMap() {
//        return parameterMap;
//    }
//
//    @Override
//    public Enumeration<String> getParameterNames() {
//        return Collections.enumeration(parameterMap.keySet());
//    }
//
//    @Override
//    public String[] getParameterValues(String name) {
//        return parameterMap.get(name);
//    }
//
//    @Override
//    public BufferedReader getReader() throws IOException {
//        return new BufferedReader(new InputStreamReader(getInputStream(), StandardCharsets.UTF_8));
//    }
//
//    @Override
//    public ServletInputStream getInputStream() {
//        ByteArrayInputStream dataStream = new ByteArrayInputStream(bytes);
//        return new ServletInputStream() {
//            @Override
//            public boolean isFinished() {
//                return dataStream.available() <= 0;
//            }
//
//            @Override
//            public boolean isReady() {
//                return dataStream.available() > 0;
//            }
//
//            @Override
//            public void setReadListener(ReadListener readListener) {
//                throw new UnsupportedOperationException("Not implemented");
//            }
//
//            @Override
//            public int read() {
//                return dataStream.read();
//            }
//        };
//    }
//}
